﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Easily
{
    public partial class frmUEcomSend : Form
    {
        private GeneralIcon MyIcon = null;  //保存传入的控件对象
        /// <summary>
        ///构造函数
        ///主要功能：加载保存的控件设置；生成初始代码；
        /// </summary>
        public frmUEcomSend(GeneralIcon icon)
        {
            InitializeComponent();
            this.MyIcon = icon;
            //添加头文件
            this.MyIcon.code.HeadFile = "#include \"uecom.h\"";
            //添加可供选择的系统变量到cBox_var中
            if (Globaldefine.FrmParent.ActivedrmGraphicFlow != null)
            {
                //全局变量
                for (int i = 0; i < Globaldefine.FrmParent.ActivedrmGraphicFlow.m_VariableSys.Count; i++)
                {
                    cBox_var.Items.Add(Globaldefine.FrmParent.ActivedrmGraphicFlow.m_VariableSys[i]);
                }
                //传感器局部变量
                foreach (var item in Globaldefine.FrmParent.ActivedrmGraphicFlow.m_Sensor_VariableLocal.Values)
                {
                    cBox_var.Items.Add(item);
                }
                //局部变量
                foreach (var item in Globaldefine.FrmParent.ActivedrmGraphicFlow.m_VariableLocal)
                {
                    cBox_var.Items.Add(item);
                }
            }
            //载入保存的参数
            if (MyIcon.code.Save != "")
            {
                //保存的参数共有7项，以英文分号';'分开
                //保存的内容分别是：（1）发送的是否为纯字符串：True为真，False为假；
                //（2）txt_string文本框中的内容；（3）txt_varPre文本框中的内容；
                //（4）txt_varAfter文本框中的内容；（5）cBox_var选中的项目；
                string[] tmp = MyIcon.code.Save.Split(';');
                if (tmp[0] == "True")
                {
                    txt_string.Text = tmp[1];
                    rBtn_text.Checked = true;
                }
                else
                {
                    txt_varPre.Text = tmp[2];
                    txt_varAfter.Text = tmp[3];
                    if (!cBox_var.Items.Contains(tmp[4]))  //防止item尚未被添加
                        cBox_var.Items.Add(tmp[4]);
                    cBox_var.SelectedItem = tmp[4];
                    rbtn_var.Checked = true;
                }
            }
            btn_confirm_Click(new object(), new EventArgs());//触发确认
        }
        /// <summary>
        /// 选中“仅发送字符串”
        /// 主要功能：更改显示
        /// </summary>
        private void rBtn_text_Click(object sender, EventArgs e)
        {
            //更改显示
            txt_varPre.Enabled = false;
            txt_varAfter.Enabled = false;
            cBox_var.Enabled = false;
            txt_string.Enabled = true;
        }
        /// <summary>
        /// 选中“发送字符串及变量”
        /// 主要功能：更改显示
        /// </summary>
        private void rbtn_var_Click(object sender, EventArgs e)
        {
            //更改显示
            txt_varPre.Enabled = true;
            txt_varAfter.Enabled = true;
            cBox_var.Enabled = true;
            txt_string.Enabled = false;
        }
        /// <summary>
        /// 点击“确定”按钮
        /// 主要功能：根据配置生成新代码，并设置对话返回为OK
        /// </summary>
        private void btn_confirm_Click(object sender, EventArgs e)
        {
            MyIcon.code.Clear();//清空以前代码
            if (rBtn_text.Checked)
            {
                int dataLen = Encoding.GetEncoding("GBK").GetBytes(txt_string.Text).Length + 1;
                MyIcon.code.InsertCode = "\twifi_sendN(\""+ txt_string.Text +"\","+dataLen.ToString()+");";
                MyIcon.code.Comment = "通过NB-IoT发送数据：" + txt_string.Text;
                MyIcon.code.Save = rBtn_text.Checked.ToString() + ";" + txt_string.Text.ToString() + ";;;;";
            }
            else
            {
                MyIcon.code.GlobalVariable = "UserData gUserData;\r\n";
                if (cBox_var.SelectedItem != null && cBox_var.SelectedItem.ToString() != "")
                {
                    MyIcon.code.InsertCode += "\twifi_sendN(" + "(uint8_t *)"+cBox_var.SelectedValue + "," + "sizeof(UserData));";
                }
                //   Console.WriteLine(MyIcon.code.InsertCode);
                string temp = "";
                if (cBox_var.SelectedItem != null)
                    temp = cBox_var.SelectedItem.ToString();
                MyIcon.code.Comment = "通过NB-IoT发送数据：" + cBox_var.SelectedValue;
                MyIcon.code.Save = rBtn_text.Checked.ToString() + ";;" + txt_varPre.Text.ToString()
                    + ";" + txt_varAfter.Text.ToString() + ";" + temp + ";";
            }
            //外部会对此进行判断，因此是必要的
            this.DialogResult = DialogResult.OK;
        }
        /// <summary>
        /// 在文本框被聚焦时，按下按键触发
        /// 主要功能：设置不能输入英文分号';'
        /// </summary>
        private void txt_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == ';')
                e.Handled = true;  //表明按键事件已处理
        }
        /// <summary>
        /// 单击“取消”按钮
        /// 主要功能：设置返回结果为取消
        /// </summary>
        private void btn_Cancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }
        /// <summary>
        /// 点击“注释说明”按钮
        /// 功能概要：为控件添加自定义注释说明
        /// </summary>
        private void btn_comment_Click(object sender, EventArgs e)
        {
            using (frmNodeEditer NE = new frmNodeEditer(this.MyIcon.code.Comment))
            {
                if (NE.ShowDialog() == DialogResult.OK)
                    this.MyIcon.code.Comment = NE.NoteEdit;
            }
        }

        private void cBox_var_DropDown(object sender, EventArgs e)
        {
            ComboBox c = sender as ComboBox;
            if (Globaldefine.FrmParent.ActivedrmGraphicFlow != null)
                c.DataSource = Globaldefine.FrmParent.ActivedrmGraphicFlow.m_VariableSys;
        }

        private void cBox_var_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
